/***************************************************
 * 此文件的版权归属xxxx公司所有，未经允许，请勿复制
 */
package com.pxxy.cels.util;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/************************************************
 * @author yejf
 * @since JDK7.0
 * @CreateDate 2020年3月26日 上午11:25:05
 * @description 此类用来描述了通过文件来读取依次增长的ID值
 *
 */
public class IdGenerator {

	private static final String ID_FILE = "datas/id_data/id.dat";

	private static final long DEFAULT_VALUE = 1L;

	/*****
	 * 从文件中读取一个ID值。 这个ID值从1L开始，依次增长
	 * 
	 * @return
	 */
	public static long getID() {
		long id = -1L;
		// 判断文件是否存在
		File file = new File(ID_FILE);
		//
		try {
			if (!file.exists()) {
				// 创建此文件
				file.createNewFile();
				// 2. 把默认值+1 写入到文件中
				write(DEFAULT_VALUE + 1);
				return DEFAULT_VALUE;
			} else {
				//文件是存在的
				//先读到
				id = read();
				//再把id+1 写回去
				write(id + 1);
				//返回id
				return id;
			}
			
		} catch (IOException e) {
			e.printStackTrace();
			// 创建文件失败，返回非正数
			return -1;
		}
	}

	private static long read() throws IOException {
		long id = -1;
		//
		try(DataInputStream dis = 
				new DataInputStream(new FileInputStream(ID_FILE))) {
			//直接读取
			id = dis.readLong();
		}
		//返回
		return id;
	}

	/******
	 * 把长整型 id 写入到 ID_FILE 文件中
	 * @param l
	 */
	private static void write(long id) throws IOException {
		//
		try(DataOutputStream dos = 
				new DataOutputStream(new FileOutputStream(ID_FILE))) {
			//直接写入
			dos.writeLong(id);
		}
	}

}
